﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bussiness;

namespace WebApplication.Admin
{
    public partial class ChiTietHoaDonNhapAdd : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadHienthi();
                LoadNhomhang();
                LoadNhacc();
                LoadNhanvien();
            }
        }
        public void LoadHienthi()
        {
            IUnitOfWork iunitofwork = new EFUnitOfWork();
            string strid = "" + Request["MAHDN"];
            CHITIETHOADONNHAPRepository repository = new CHITIETHOADONNHAPRepository(new EFRepository<CHITIETHOADONNHAP>(), iunitofwork);
            CHITIETHOADONNHAP objHoaDonN = null;
            if (!string.IsNullOrEmpty(strid))
            {
                objHoaDonN = repository.GetById(strid);
                txtmahd.Value = objHoaDonN.MAHDN;
                txtsoluong.Value = objHoaDonN.SOLUONGNHAP.ToString();
                if (objHoaDonN.TINHTRANG == true)
                {
                    rddtt.Checked = true;
                }
                else
                {
                    rdchuatt.Checked = true;
                }
                Dlmathang.SelectedValue = objHoaDonN.MAMH;
                txtdongia.Value = objHoaDonN.HOADONNHAP.DONGIA.ToString();
                Dlnhacc.SelectedValue = objHoaDonN.HOADONNHAP.NHACUNGCAP.MANCC;
                Dlnhanvien.SelectedValue = objHoaDonN.HOADONNHAP.NHANVIEN.MANV;
                txtghichu.Value = objHoaDonN.HOADONNHAP.GHICHU;

            }

        }
        
        /// <summary>
        /// Load mặt hàng theo nhóm hàng
        /// </summary>
        /// <param name="manh"></param>
        public void LoadMatHangTheoNhomHang(string manh)
        {
            IUnitOfWork iunitofwork = new EFUnitOfWork();
            MATHANGRepository repository = new MATHANGRepository(new EFRepository<MATHANG>(), iunitofwork);
            IQueryable<MATHANG> objMathang = repository.All().Where(p => p.MANH == manh);
            Dlmathang.DataSource = objMathang;
            Dlmathang.DataTextField = "TENMH";
            Dlmathang.DataValueField = "MAMH";
            Dlmathang.DataBind();
            Dlmathang.Items.Insert(0, new ListItem { Text = "---Chọn mặt hàng---", Value = "0" });
        }
        public void LoadNhanvien()
        {
            IUnitOfWork iunitofwork = new EFUnitOfWork();
            NHANVIENRepository repository = new NHANVIENRepository(new EFRepository<NHANVIEN>(), iunitofwork);
            IQueryable<NHANVIEN> objNhanvien = repository.All();
            Dlnhanvien.DataSource = objNhanvien;
            Dlnhanvien.DataValueField = "MANV";
            Dlnhanvien.DataTextField = "USERNAME";
            Dlnhanvien.DataBind();
            Dlnhanvien.Items.Insert(0, new ListItem { Text = "---Chọn mặt hàng---", Value = "0" });
        }
        public void LoadNhacc()
        {
            IUnitOfWork iunitofwork = new EFUnitOfWork();
            NHACUNGCAPRepository repository = new NHACUNGCAPRepository(new EFRepository<NHACUNGCAP>(), iunitofwork);
            IQueryable<NHACUNGCAP> objNhacc = repository.All();
            Dlnhacc.DataSource = objNhacc;
            Dlnhacc.DataValueField = "MANCC";
            Dlnhacc.DataTextField = "TENNCC";
            Dlnhacc.DataBind();
            Dlnhacc.Items.Insert(0, new ListItem { Text = "---Chọn mặt hàng---", Value = "0" });
        }
        public void LoadNhomhang()
        {
            IUnitOfWork iunitfwork = new EFUnitOfWork();
            NHOMHANGRepository repository = new NHOMHANGRepository(new EFRepository<NHOMHANG>(), iunitfwork);
            IQueryable<NHOMHANG> objnhomhang = repository.All();
            dlnhomhang.DataSource = objnhomhang;
            dlnhomhang.DataValueField = "MANH";
            dlnhomhang.DataTextField = "TENNHOMHANG";
            dlnhomhang.DataBind();
            dlnhomhang.Items.Insert(0, new ListItem { Text="---Chọn nhóm hàng---",Value="0"});
        }
        /// <summary>
        /// cap nhap
        /// </summary>
        
        public void Capnhap()
        {
            IUnitOfWork iunitofwork = new EFUnitOfWork();
            bool isscapnhap = true;
            string strid = "" + Request["MAHDN"];
            CHITIETHOADONNHAPRepository repository = new CHITIETHOADONNHAPRepository(new EFRepository<CHITIETHOADONNHAP>(), iunitofwork);
            HOADONNHAPRepository repositoryhoadn = new HOADONNHAPRepository(new EFRepository<HOADONNHAP>(), iunitofwork);
            DateTime NgayHT = DateTime.Now;
            bool istonkho = true;
            HOADONNHAP objhoadonNhap = null;
            CHITIETHOADONNHAP objHoaDonN = null;
            if (!string.IsNullOrEmpty(strid))
            {
                isscapnhap = false;
                objHoaDonN = repository.GetById(strid);
                objhoadonNhap = repositoryhoadn.GetById(strid);

            }
            if (string.IsNullOrEmpty(strid))
            {
                isscapnhap = true;
                objHoaDonN = new CHITIETHOADONNHAP();
                objhoadonNhap = new HOADONNHAP();
            }

            if (string.IsNullOrEmpty(txtmahd.Value) || Dlmathang.SelectedValue.Equals("0") || Dlnhacc.SelectedValue.Equals("0") || Dlnhanvien.SelectedValue.Equals("0") || string.IsNullOrEmpty(txtdongia.Value))
            {
                RegisterClientScriptBlock("Thông báo", "<script> alert ('Vui lòng nhập đầy đủ')</script>");
                return;
            }
            objhoadonNhap.MAHDN = txtmahd.Value;
            objhoadonNhap.MANCC = Dlnhacc.SelectedValue;
            objhoadonNhap.MANV = Dlnhanvien.SelectedValue;
            DateTime ngay = Commomcs.convertDate(NgayHT.ToString("dd/MM/yyyy"));
            objhoadonNhap.NGAYNHAP = ngay;
            objhoadonNhap.DONGIA = int.Parse(txtdongia.Value);
            objhoadonNhap.TONGTIEN = int.Parse(txtdongia.Value) * int.Parse(txtsoluong.Value);
            Session["Tongtien"] = int.Parse(txtdongia.Value) * int.Parse(txtsoluong.Value);
            objhoadonNhap.GHICHU = txtghichu.Value;
            objHoaDonN.MAHDN = txtmahd.Value;
            objHoaDonN.SOLUONGNHAP = int.Parse(txtsoluong.Value);
            objHoaDonN.MAMH = Dlmathang.SelectedValue;
            if (!string.IsNullOrEmpty(txtpt.Value))
            {
                objhoadonNhap.GIAM_PT = int.Parse(txtpt.Value);
                objhoadonNhap.TONGTIEN = (int.Parse(txtdongia.Value)-(int.Parse(txtpt.Value) * int.Parse(txtdongia.Value) / 100)) * int.Parse(txtsoluong.Value);
            }
            if (rddtt.Checked)
            {
                objHoaDonN.TINHTRANG = true;
            }
            else
            {
                objHoaDonN.TINHTRANG = false;
            }
            
            try
            {
                if (isscapnhap)
                {
                    repositoryhoadn.Add(objhoadonNhap);
                    repository.Add(objHoaDonN);

                }
                repositoryhoadn.Save();
                repository.Save();
                TonKho();

            }
            catch (Exception ex)
            {
                RegisterClientScriptBlock("Thông báo", "<script> alert('Đã tồn tại mã hóa đơn không được trùng')</script>");

            }
        }
        protected void lbtncapnhap_Click(object sender, EventArgs e)
        {
            Capnhap();
            if (rdchuatt.Checked)
            {
                Response.Redirect("CongNoNCCAdd.aspx?MANCC=" + Dlnhacc.SelectedValue);
               
            }
            string strmahdn = "" + Request["MAHDN"];
            if (!string.IsNullOrEmpty(strmahdn) && Dlmathang.SelectedValue.Equals("Dl19l"))
            {
                RegisterClientScriptBlock("Thông báo", "<script> alert('Vui lòng nhập số lượng vỏ xuất')<script>");
            }
        }
        

        protected void lbtnthemmoi_Click(object sender, EventArgs e)
        {
            txtmahd.Value ="";
            txtdongia.Value = "";
            txtghichu.Value = "";
            txtsoluong.Value = "";
            Dlmathang.SelectedValue = "0";
            Dlnhacc.SelectedValue = "0";
            Dlnhanvien.SelectedValue = "0";
            Response.Redirect("ChiTietHoaDonNhapAdd.aspx");
        }

        protected void dlnhomhang_SelectedIndexChanged(object sender, EventArgs e)
        {
            string manh=dlnhomhang.SelectedValue;
            LoadMatHangTheoNhomHang(manh);
        }
        public void TonKho()
        {
            string mamh = Dlmathang.SelectedValue;
            DateTime dt = Commomcs.convertDate(DateTime.Now.ToString("dd/MM/yyyy"));
            DateTime dtHtruoc = Commomcs.DuyenNgayThang(mamh);
            IUnitOfWork iunitfwork = new EFUnitOfWork();
            TON_KHORepository repositoryTonKho = new TON_KHORepository(new EFRepository<TON_KHO>(), iunitfwork);
            CHITIETHOADONXUATRepository repositoryChitietHDX = new CHITIETHOADONXUATRepository(new EFRepository<CHITIETHOADONXUAT>(), iunitfwork);
            HOADONNHAPRepository repositoryHdn = new HOADONNHAPRepository(new EFRepository<HOADONNHAP>(), iunitfwork);
            int Tongslxuat = 0;
            int Tongslnhap = 0;
            IQueryable<HOADONNHAP> LstHdn = repositoryHdn.All().Where(p => p.CHITIETHOADONNHAP.MAMH == mamh && p.NGAYNHAP == dt);
            IQueryable<CHITIETHOADONXUAT> LstHdx = repositoryChitietHDX.All().Where(p => p.HOADONXUAT.NGAYXUAT == dt && p.MAMH == mamh);
            if (LstHdn != null)
            {
                foreach (HOADONNHAP hdn in LstHdn)
                {
                    Tongslnhap += (int)hdn.CHITIETHOADONNHAP.SOLUONGNHAP;
                }
            }
            if (LstHdx != null)
            {
                foreach (CHITIETHOADONXUAT hdx in LstHdx)
                {
                    Tongslxuat += (int)hdx.SOLUONGXUAT;
                }
            }
            TON_KHO TonkhoHientai = null;
            TON_KHO tonkho = null;
            TON_KHO TonkhoHt = null;
            bool iscapnhap = true;
            TonkhoHientai = repositoryTonKho.All().Where(p => p.MAMH == mamh && p.NGAYTHANG == dt).FirstOrDefault();
            if (TonkhoHientai != null)
            {
                iscapnhap = false;
                int sldau = (int)TonkhoHientai.SOLUONGDAU;
                TonkhoHientai.NGAYTHANG = dt;
                TonkhoHientai.MAMH = Dlmathang.SelectedValue;
                TonkhoHientai.SOLUONGDAU = sldau;
                TonkhoHientai.SOLUONGNHAP = Tongslnhap;
                TonkhoHientai.SOLUONGXUAT = Tongslxuat;
                TonkhoHientai.SOLUONGTON = (Tongslnhap + sldau) - Tongslxuat;

            }
            if (TonkhoHientai == null)
            {
                iscapnhap = true;
                TonkhoHientai = new TON_KHO();
                TonkhoHientai.NGAYTHANG = dt;
                TonkhoHientai.MAMH = Dlmathang.SelectedValue;
                TonkhoHientai.SOLUONGNHAP = Tongslnhap;
                TonkhoHientai.SOLUONGXUAT = Tongslxuat;
                TonkhoHt = repositoryTonKho.All().Where(p => p.NGAYTHANG == dtHtruoc && p.MAMH == mamh).FirstOrDefault();
                if (TonkhoHt == null)
                {
                    TonkhoHientai.SOLUONGDAU = 0;
                    TonkhoHientai.SOLUONGTON = Tongslnhap - Tongslxuat;
                }
                if (TonkhoHt != null)
                {
                    TonkhoHientai.SOLUONGDAU = TonkhoHt.SOLUONGTON;
                    TonkhoHientai.SOLUONGTON = TonkhoHt.SOLUONGTON + Tongslnhap - Tongslxuat;
                }
            }
            try
            {
                if (iscapnhap)
                {
                    repositoryTonKho.Add(TonkhoHientai);
                }
                repositoryTonKho.Save();
            }
            catch
            {
                RegisterClientScriptBlock("Thông báo", "<script> alert('Vui lòng nhập lại')</script>");
            }
        }
    }
}